/**
 * File: clienteMB.java
 * Data: 05.01.2011
 * Objective: Criar a classe managed bean da entidade que representa a Provincia.
 *
 * Copyright 2011 S2DZ CORPORATION
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package mbeans;

import controller.ProdutoController;
import controller.StockController;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import modelo.ProdutoModelo;
import modelo.StockModelo;
import controller.ControllerUtil;

/**
 * Managed Bean da entidade que representa o Fornecedor.
 * @author Paulo Ilenga
 */
@ManagedBean
@SessionScoped
public class produtoMB implements Serializable
{

    private ProdutoController controller;
    private ProdutoModelo modelo, modeloTemp;
    private ProdutoModelo[] seleccionados;
    private FacesContext context;
    private StockModelo stockModelo;
    private StockController stockController;

    /** Constructor da classe sem argumentos */
    public produtoMB()
    {
        controller = new ProdutoController();
        modelo = new ProdutoModelo();
        modeloTemp = new ProdutoModelo();
        stockController = new StockController();
    }

//------------------------inicio dos Métodos set e get---------------------------------
    public ProdutoController getController()
    {
        return controller;
    }

    public void setController(ProdutoController controller)
    {
        this.controller = controller;
    }

    public ProdutoModelo getModelo()
    {
        modelo.setDataRegisto(new Date());
        return modelo;
    }

    public void setModelo(ProdutoModelo modelo)
    {
        this.modelo = modelo;
    }

    public ProdutoModelo getModeloTemp()
    {
        return modeloTemp;
    }

    public void setModeloTemp(ProdutoModelo modeloTemp)
    {
        this.modeloTemp = modeloTemp;
    }

    public List<ProdutoModelo> getTodos()
    {
        return controller.getTodos();
    }

    public ProdutoModelo[] getSeleccionados()
    {
        return seleccionados;
    }

    public void setSeleccionados(ProdutoModelo[] seleccionados)
    {
        this.seleccionados = seleccionados;
    }

    //-----------------------fim dos métodos set e get------------------------------
    /**
     * Método salvar da classe
     */
    public void salvar()
    {
        context = FacesContext.getCurrentInstance();


        if (!modelo.getDescricao().equals(""))
        {
            if (modelo.getIdModelo() != 0)
            {
                if (modelo.getIdTipo() != 0)
                {
                    if (modelo.getIdFabricante() != 0)
                    {
                            if (!modelo.getCor().equals(""))
                            {
                                if (!modelo.getTamanho().equals(""))
                                {
                                    if (!modelo.getNumSerie().equals(""))
                                    {
                                            if (!modelo.getEstocavel().equalsIgnoreCase("Seleccionar"))
                                            {
                                                if (controller.save(modelo))
                                                {
                                                    if(modelo.getEstocavel().equalsIgnoreCase("sim"))
                                                    {
                                                        stockModelo = new StockModelo(0, ControllerUtil.getIdActual("tbl_produto"), 5, 0, 0, 0);

                                                        if(!stockController.save(stockModelo))
                                                            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "GCBoutique", "Erro N.º SG001: Ao Registar no Stock! Consulte o Suporte"));
                                                    }
                                                    modelo = new ProdutoModelo();
                                                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "GCBoutique", "Registo Guardado Com Sucesso!"));
                                                } else
                                                {
                                                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "GCBoutique", "Erro N.º SG001: Ao Guardar o Registo! Consulte o Suporte"));
                                                }
                                            } else
                                            {
                                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Informar se o Produto é Estocável!"));
                                            }
                                         
                                    } else
                                    {
                                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Número de Série!"));
                                    }
                                } else
                                {
                                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Tamanho!"));
                                }
                            } else
                            {
                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Cor!"));
                            }
                    } else
                    {
                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar o Fabricante!"));
                    }
                } else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar a Categoria e o Tipo"));
                }

            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar o Modelo do Produto!"));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Descricao do Produto!"));
        }

    }

    /**
     * Método que actualiza os dados do registo.
     * @param o evento gerado pela página.
     */
    public void actulizar(ActionEvent event)
    {
        context = FacesContext.getCurrentInstance();

        if (!modeloTemp.getDescricao().equals(""))
        {
            if (modeloTemp.getIdModelo() != 0)
            {
                if (modeloTemp.getIdTipo() != 0)
                {
                    if (modeloTemp.getIdFabricante() != 0)
                    {
                            if (!modeloTemp.getCor().equals(""))
                            {
                                if (!modeloTemp.getTamanho().equals(""))
                                {
                                    if (!modeloTemp.getNumSerie().equals(""))
                                    {
                                            if (!modeloTemp.getEstocavel().equalsIgnoreCase("Seleccionar"))
                                            {
                                                if (controller.update(modeloTemp))
                                                {
                                                    modeloTemp = new ProdutoModelo();
                                                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "GCBoutique", "Registo Actualizado Com Sucesso!"));
                                                } else
                                                {
                                                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "GCBoutique", "Erro N.º SG001: Ao Actualizar o Registo! Consulte o Suporte"));
                                                }
                                            } else
                                            {
                                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Preço!"));
                                            }
                                    } else
                                    {
                                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Número de Série!"));
                                    }
                                } else
                                {
                                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Tamanho!"));
                                }
                            } else
                            {
                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Cor!"));
                            }
                    } else
                    {
                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar o Fabricante!"));
                    }
                } else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar a Categoria e o Tipo"));
                }

            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar o Modelo do Produto!"));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Descricao do Produto!"));
        }
    }

    /**
     * Método que elimina os dados do registo.
     * @param o evento gerado pela página.
     */
    public void eliminar(ActionEvent event)
    {
        context = FacesContext.getCurrentInstance();


        if (modeloTemp.getId() != 0)
        {
            if (modeloTemp.getIdModelo() != 0)
            {
                if (modeloTemp.getIdTipo() !=0)
                {
                    if (controller.eliminar(modeloTemp.getId(), "tbl_produto"))
                    {
                        modeloTemp = new ProdutoModelo();
                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "GCBoutique", "Registo Eliminado Com Sucesso!"));
                    } else
                    {
                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "GCBoutique", "Erro N.º SE001: Ao eliminar os Dados! Consultar o Suporte"));
                    }
                } else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UE001: Deve Seleccionar um registo!"));
                }
            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar um registo!"));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Erro Aviso N.º UE001: Deve Seleccionar um registo!"));
        }
    }

    /**
     * Métodos que cria uma nova instância do objecto modelo.
     */
    public void novoModelo(ActionEvent event)
    {
        modeloTemp = new ProdutoModelo();
    }
}
